package framework;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;

//import javax.naming.NamingException;

/**
 * Класс для работы с БД.
 */
public class DataBaseUtils {

	private static Logger logger = Logger.getInstance();
	private static String driverName = "oracle.jdbc.driver.OracleDriver";
	private static PropertiesResourceManager props = new PropertiesResourceManager(
			"selenium.properties");

	// Скрипты для версии 2.0.X
	private static final String PATH_TO_MAIN_SCRIPTS = "./src/test/resources/scripts/MAIN_SCRIPTS/";
	private static final String CLEAN_CLAUSE_BY_CUST_ID = "CLEAN_ONE_FZ223_CLAUSE_by_CUSTOMER_ID.sql";
	private static final String CLEAN_PLAN_BY_CUST_ID = "CLEAN_ONE_FZ223_PLAN_by_CUSTOMER_ID.sql";
	private static final String CLEAN_PURSHASE_BY_CUTS_ID = "CLEAN_ONE_FZ223_PURCHASE_by_CUSTOMER_ID.sql";
	private static final String CONTRACT_ACCOUNT_BY_CUTS_ID = "CLEAN_ONE_FZ223_CONTRACT_ACCOUNT_by_CUSTOMER_ID.sql";
	private static final String SET_PASSWORD_SCRIPT = "SET_PASSWORD.sql";
	private static final String REMOVE_DUPE_USER_SET_PERM_SCRIPT = "REMOVE_DUPE_USER_SET_PERM.sql";
	private static final String CLEAN_PROTOCOLS = "2.1.X_CLEAN_ONE_FZ223_PROTOCOL_by_REG_NUM.sql";
	private static final String UPDATE_ONE_PURSHASE_STAGE = "UPDATE_ONE_PURCHASE_STAGE.sql";
	private static final String UPDATE_ONE_PURCHASE_STAGE_COMMISSION_ACTIVITIES = "UPDATE_ONE_PURCHASE_STAGE_COMMISSION_ACTIVITIES.sql";
	
	// INSERT SCRIPTS
	public static final String INSERT_ADDRESS_SCRIPT = "INSERT_ORG_ADDRESS.sql";
	public static final String INSERT_AGENCY_SCRIPT = "INSERT_AGENCY.sql";

	private static final String CLEAN_CHANGE_REQUIREMENTS = "CLEAN_ONE_FZ223_CHANGE_REQUIREMENTS_by_REG_NUM.sql";
	private static final String CLEAN_CONTRACTS = "CLEAN_ONE_FZ223_CONTRACT_by_NOTICE_REG_NUM.sql";
	private static final String CLEAN_PPA_ORG_BY_ID = "CLEAN_ONE_FZ223_PPA_ORG_by_ID.sql";

	// Названия сущностей в скриптах
	private static final String ORG_ID = "&&ORG_ID";
	private static final String CUSTOMER_ID = "&&CUSTOMER_ID_NUM";
	private static final String LOGIN = "&&LOGIN";
	private static final String OGRN = "&&OGRN";
	private static final String INN = "&&INN";
	private static final String KPP = "&&KPP";
	private static final String FULL_NAME = "&&FULL_NAME";
	private static  String addressId;
	private static final String ADDRESS_ID = "&&ADDRESS_ID";
	private static final String PHONE = "&&PHONE";
	private static final String WEBSITE = "&&WEBSITE";
	private static final String EMAIL = "&&EMAIL";
	private static final String USER_LOGIN = "&&USER_LOGIN";
	private static final String REG_NUM = "&&REG_NUM";
	public static final String ZIP_CODE = "&&ZIP_CODE";
	public static final String ZIP_CODE_REPLACEMENT = "223344";
	private static final String PATH_TO_SCRIPTS = "./src/test/resources/scripts/";
	public static final String SELECT_PURCHASE_ZK = PATH_TO_SCRIPTS
			+ "purchaseNoticeZK.sql";
	public static final String SELECT_ALL_PURCHASE = PATH_TO_SCRIPTS
			+ "selectAllPurchaseNotice.sql";
	public static final String SELECT_ALL_USERS_BY_LOGIN = PATH_TO_SCRIPTS
			+ "selectUserIdByLogin.sql";
	public static final String PUBLISH_PURCHASE_NOTICE = PATH_TO_SCRIPTS
			+ "PublishPurchaseNotice2.sql";
	public static final String SELECT_PURCHASE_OA = PATH_TO_SCRIPTS
			+ "purchaseNoticeOA.sql";
	public static final String SELECT_PURCHASE_AE = PATH_TO_SCRIPTS
			+ "purchaseNoticeAE.sql";
	public static final String SELECT_PURCHASE_OK = PATH_TO_SCRIPTS
			+ "purchaseNoticeOK.sql";
	public static final String SELECT_PURCHASE_EP = PATH_TO_SCRIPTS
			+ "purchaseNoticeEP.sql";
	public static final String SELECT_STAGE_PURCHASE = PATH_TO_SCRIPTS
			+ "selectPurchase.sql";
	public static final String SELECT_PURCHASE = PATH_TO_SCRIPTS
			+ "selectNoticeIdByPurchaseName.sql";
	public static final String SELECT_CLAUSE = PATH_TO_SCRIPTS
			+ "selectClauseByCustomerId.sql";
	public static final String SELECT_PLAN = PATH_TO_SCRIPTS
			+ "selectPlanIdByPlanName.sql";
	public static final String SELECT_NOTICE_REG_NUM_PURCHASE = PATH_TO_SCRIPTS
			+ "selectPurchaseRegNum.sql";
	public static final String SELECT_PURCHASE_ISNE = PATH_TO_SCRIPTS
			+ "purchaseNoticeIS(nE).sql";
	public static final String UPDATE_STAGE_PURCHASE = PATH_TO_SCRIPTS
			+ "updatePurchaseStage.sql";
	public static final String SELECT_PURCHASE_PROTOCOL = PATH_TO_SCRIPTS
			+ "purchaseProtocolVK.sql";
	public static final String SELECT_PURCHASE_PROTOCOL_EXPL = PATH_TO_SCRIPTS
			+ "purchaseProtocolExplanation.sql";
	public static final String SELECT_LOT_GUID_BY_REGNAME = PATH_TO_SCRIPTS
			+ "selectLotGUIDByRegNum.sql";

	// private static final String ORG_OGRN = "&&OGRN_NUM";
	// Переменные бд разных стендов
	public static String serverName, portNumber, sid, username, password;

	/**
	 * Выполняет подключение к БД
	 * 
	 * @param user
	 *            пользователь
	 * @param pass
	 *            пароль
	 * @return подключение
	 */
	public static Connection connectToDb(String user, String pass) {
		// Intialize db variables
		Connection connection = null;
		try {
			// Load the JDBC driver
			Class.forName(driverName);
		/*	logger.info(String.format("Значения переменных: driverName=%1$s",
					driverName));*/
			// Create a connection to the database
			String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber
					+ ":" + sid;
			//logger.info(String.format("Значения переменных: url=%1$s", url));
			connection = DriverManager.getConnection(url, user, pass);
			/*logger.info(String.format(
					"Значения переменных: url=%1$s, user=%2$s, pass=%3$s", url,
					user, pass));*/
		} catch (ClassNotFoundException e) {
			logger.error("Не удалось подключиться к БД " + e.getMessage());
		} catch (SQLException e) {
			logger.error("Не удалось подключиться к БД " + e.getMessage());
		}
		return connection;
	}

	/**
	 * Выполняет скрипт
	 * 
	 * @param pathToScript
	 *            путь к скрипту
	 * @param replaceMap
	 *            карта реплейса
	 */
	public static void runScripts(String pathToScript,
			HashMap<String, String> replaceMap) {
		runScripts(pathToScript, replaceMap, false, false);
	}

	/**
	 * Удаляет все планы закупок для организации
	 * 
	 * @param orgName
	 *            наименование организации
	 * @param version
	 *            версия стенда
	 */
	public void deletePlans(String orgName, String version) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + CLEAN_PLAN_BY_CUST_ID;
		String customerId = getCustomerId(orgName);
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(CUSTOMER_ID, customerId);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Выполняет скрипт без реплейса
	 * 
	 * @param pathToScript
	 *            путь к скрипту
	 * @param replaceMap
	 *            карта реплейса
	 */
	public void runScriptsNoReplaces(String pathToScript,
			HashMap<String, String> replaceMap) {
		logger.info("runScript for :" + replaceMap.toString());
		runScripts(pathToScript, replaceMap, false, true);
	}

	/**
	 * Удаляет положения закупки для некоторой организации
	 * 
	 * @param orgName
	 *            наменование организации
	 * @param version
	 *            версия стенда
	 */
	public void deleteClauses(String orgName, String version) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + CLEAN_CLAUSE_BY_CUST_ID;
		String customerId = getCustomerId(orgName) + "";
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(CUSTOMER_ID, customerId);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Удаляет все закупки для организации
	 * 
	 * @param orgName
	 *            наименование организации
	 * @param version
	 *            версия приложения
	 */
	public void deletePurshases(String orgName, String version) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + CLEAN_PURSHASE_BY_CUTS_ID;
		String customerId = getCustomerId(orgName);
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(CUSTOMER_ID, customerId);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Удаляет все отчетности о договорах для организации
	 * 
	 * @param orgName
	 *            наименование организации
	 * @param version
	 *            версия приложения
	 */
	public void deleteOtchetnost(String orgName, String version) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + CONTRACT_ACCOUNT_BY_CUTS_ID;
		String customerId = getCustomerId(orgName);
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(CUSTOMER_ID, customerId);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Возвращает ID для организации
	 * 
	 * @param orgName
	 *            название организации
	 * @return ID организации
	 */
	public static String getCustomerId(String orgName) {
		initializeDB();
		String id = "";

		Connection connection = connectToDb(username, password);
		try {
			Statement st = connection.createStatement();
			int status = st
					.executeUpdate("SELECT ID FROM FZ223_PPA.AGENCY WHERE FULL_NAME='"
							+ orgName + "'");
			if (status == 1) {
				ResultSet r = st.getResultSet();
				r.next();
				id = r.getNString("id");
				Logger.info("ID организации " + orgName + ": " + id);
			} else {
				logger.warn("Не удалось получить ID для организации " + orgName);
			}
		} catch (SQLException e) {
			logger.debug(e.getMessage());
		}
		return id;
	}

	/**
	 * Возвращает ОГРН для организации
	 * 
	 * @param orgName
	 *            название организации
	 * @return ОГРН организации
	 */
	private String getOgrn(String orgName) {
		initializeDB();
		String id = "";
		Connection connection = connectToDb(username, password);
		try {
			Statement st = connection.createStatement();
			int status = st
					.executeUpdate("SELECT OGRN FROM FZ223_ppa.agency where full_name='"
							+ orgName + "'");
			if (status == 1) {
				ResultSet r = st.getResultSet();
				r.next();
				id = r.getNString("ogrn");
				logger.info("ОГРН организации " + orgName + ": " + id);
			} else {
				logger.warn("Не удалось получить ID для организации " + orgName);
			}
		} catch (SQLException e) {
			logger.debug(e.getMessage());
		}
		return id;
	}

	/**
	 * Возвращает ADDRESS_ID для будущей организации по ZIP_CODE
	 * 
	 * @param zipCode - поиск адреса по зип коду (по умолчанию = 223344)
	 * @return ADDRESS_ID из таблицы FZ223_PPA.AGENCY_ADDRESS
	 */
	public static String getAddressId(String zipCode) {
		initializeDB();
		String id = "";
		Connection connection = connectToDb(username, password);
		try {
			Statement st = connection.createStatement();

			int status = st
					.executeUpdate("SELECT MAX(ID) FROM fz223_ppa.agency_address WHERE zip ='"
							+ zipCode + "'");
			if (status == 1) {
				ResultSet r = st.getResultSet();
				r.next();
				id = r.getNString("MAX(ID)");
				Logger.info("Значение ADDRESS_ID для кода" + zipCode + ": " + id);
			} else {
				logger.warn("Не удалось получить ID для адреса " + zipCode);
			}
		} catch (SQLException e) {
			logger.debug(e.getMessage());
		}
		return id;
	}

	/**
	 * Выполняет SELECT из базы данных
	 * 
	 * @param script
	 *            скрипт для селекта
	 * @return результат из первой колонки селекта
	 */
	/*
	 * private String makeSelect(String script){ initializeDB(); String id = "";
	 * Connection connection = connectToDb(username, password); try{ Statement
	 * st = connection.createStatement(); int status = st.executeUpdate(script);
	 * if(status == 1) { ResultSet r = st.getResultSet(); r.next(); id =
	 * r.getNString(1); logger.info("Результат выполнения скрипта " + script +
	 * " -> " + id); } else { logger.warn("Не удалось выполнить скрипт " +
	 * script); } }catch(SQLException e){ logger.debug(e.getMessage()); } return
	 * id; }
	 */

	/**
	 * Инициализирует некоторые переменные для работы с бд
	 */
	public static void initializeDB() {
		try {
			serverName = System.getProperty("hostnamedb") == null ? props
					.getProperty("hostnamedb") : System
					.getProperty("hostnamedb");
		/*	logger.info(String.format(
					"Переменная serverName=%1$s успешно проинициализирована",
					serverName));*/
		} catch (Exception e) {
			logger.info(String.format(
					"Переменная serverName не проинициализирована", serverName));
			e.printStackTrace();
		}
		try {
			portNumber = System.getProperty("portdb") == null ? props
					.getProperty("portdb") : System.getProperty("portdb");
			/*logger.info(String.format(
					"Переменная portNumber=%1$s успешно проинициализирована",
					portNumber));*/
		} catch (Exception e) {
			logger.info(String.format(
					"Переменная portNumber не проинициализирована", portNumber));
			e.printStackTrace();
		}
		try {
			sid = System.getProperty("sid") == null ? props.getProperty("sid")
					: System.getProperty("sid");
			/*logger.info(String.format(
					"Переменная sid=%1$s успешно проинициализирована", sid));*/
		} catch (Exception e) {
			logger.info(String.format("Переменная sid не проинициализирована",
					sid));
			e.printStackTrace();
		}
		try {
			username = System.getProperty("usernamedb") == null ? props
					.getProperty("usernamedb") : System
					.getProperty("usernamedb");
			/*logger.info(String.format(
					"Переменная username=%1$s успешно проинициализирована",
					username));*/
		} catch (Exception e) {
			logger.info(String.format(
					"Переменная username не проинициализирована", username));
			e.printStackTrace();
		}
		try {
			password = System.getProperty("passworddb") == null ? props
					.getProperty("passworddb") : System
					.getProperty("passworddb");
			/*logger.info(String.format(
					"Переменная password=%1$s успешно проинициализирована",
					password));*/
		} catch (Exception e) {
			logger.info(String.format(
					"Переменная password не проинициализирована", password));
			e.printStackTrace();
		}
	}

	/**
	 * Удаляет организацию по названию
	 * 
	 * @param orgName
	 *            наименование организации
	 * @param version
	 *            версия стенда
	 */
	public void deleteOrganizationByName(String orgName, String version) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + CLEAN_PPA_ORG_BY_ID;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		String id = getCustomerId(orgName);
		replaceMap.put(ORG_ID, id);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Выполняет селект из бд
	 * 
	 * @param pathToScript
	 *            путь к скрипту
	 * @param replaceMap
	 *            карта реплейсов
	 * @return ResultSet
	 */
	/*
	 * private ResultSet select(String pathToScript, HashMap<String,String>
	 * replaceMap) { return runScripts(pathToScript,replaceMap,true,false); }
	 */

	/**
	 * Выполняет селект
	 * 
	 * @param pathToScript
	 *            путь к скрипту
	 * @param replaceMap
	 *            карта реплейсов
	 * @param columnLabel
	 *            наименование колонки, из которой делается селект
	 * @return результат
	 */
	public String select(String pathToScript,
			HashMap<String, String> replaceMap, String columnLabel) {
		try {
			return runScripts(pathToScript, replaceMap, true, false).getString(
					columnLabel);
		} catch (SQLException e) {
			logger.debug(e.getMessage());
		}
		return "";
	}

	/**
	 * Выполняет скрипт из файла
	 * 
	 * @param pathToScript
	 *            путь к скрипту
	 * @param replaceMap
	 *            таблица символов, которые нужно заменить в каждой строке
	 *            замена ';' заменить на '' сществует по умолчанию.
	 * @param isSelect
	 *            это селект?
	 * @param noReplace
	 *            делать реплейс?
	 * @return ResultSet
	 */
	private static ResultSet runScripts(String pathToScript,
			HashMap<String, String> replaceMap, boolean isSelect,
			boolean noReplace) {
		initializeDB();
		File f = new File(pathToScript);
		if (!f.exists()) {
			f = new File("." + pathToScript);
		}
		if (!f.exists()) {
			logger.fatal("Отустствует скрипт: " + pathToScript);
		}
		try {
			FileInputStream fstream = new FileInputStream(f.getAbsolutePath());
			DataInputStream in = new DataInputStream(fstream);
			BufferedReader br = new BufferedReader(new InputStreamReader(in));
			/*
			 * // Без предварительного прохода по всем строкам происходит
			 * зацикливание int countOfLines = 0; while(br.readLine() != null){
			 * countOfLines++; }
			 * logger.info("Количество строк в файле скрипта: " + countOfLines);
			 * br = new BufferedReader(new InputStreamReader(in));
			 */
			String strLine;
			Connection connection = connectToDb(username, password);
			int lineCounter = 0;
			while ((strLine = br.readLine()) != null) {
				if (strLine.substring(0, 1).equals("-")) {
					lineCounter++;
					continue;
				}
				// делаем необходимые замены в скрипте
				for (String key : replaceMap.keySet()) {
					strLine = strLine.replace(key, replaceMap.get(key));
				}
				try {
					Statement st = connection.createStatement();
					int status;
					System.out.println("Script: " + strLine);
					if (noReplace) {
						status = st.executeUpdate(strLine);
					} else {
						status = st.executeUpdate(strLine.replace("; ", "")
								.replace(";", ""));
					}
					if (status == 1) {
						if (isSelect) {
							ResultSet r = st.getResultSet();
							r.next();
							return r;
						} else {
							Logger.info("Запрос из строки " + lineCounter
									+ " выполнился успешно");
							connection.commit();
						}
					} else {
						System.out.println("Запрос из строки " + lineCounter
								+ " не удался");
					}
				} catch (SQLException e) {
					System.out.println(e.getMessage());
				}
				lineCounter++;
			}
		} catch (FileNotFoundException e) {
			logger.debug(e.getMessage());
		} catch (IOException e) {
			logger.debug(e.getMessage());
		}
		return null;
	}

	/**
	 * Устанавливает пароль для пользователя, в случае включенного эмулятора
	 * 
	 * @param login
	 *            логин
	 */
	public void setPassword(String login) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + SET_PASSWORD_SCRIPT;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(LOGIN, login);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Очищает "клонов"(несколько пользаков с одинаковым логином) пользователей
	 * и выставляет все права для пользователя
	 * 
	 * @param appVersion
	 *            версия приложения
	 * @param orgName
	 *            наименование организации
	 * @param userLogin
	 *            логин пользователя
	 */
	public void removeDupeUserAndSetPerm(String appVersion, String orgName,
			String userLogin) {
		logger.info("");
		String fullPath = PATH_TO_MAIN_SCRIPTS
				+ REMOVE_DUPE_USER_SET_PERM_SCRIPT;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		String ogrn = getOgrn(orgName);
		replaceMap.put(OGRN, ogrn);
		replaceMap.put(USER_LOGIN, userLogin);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Выполняет инсерт нового адреса в базу данных
	 * 
	 * @return id добавленного адреса
	 */

	public static void insertOrgAddress() {
		String fullPath = PATH_TO_MAIN_SCRIPTS + INSERT_ADDRESS_SCRIPT;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(ZIP_CODE, ZIP_CODE_REPLACEMENT);
		runScripts(fullPath, replaceMap);
	}
	
	/**
	 * Вставляет новую организацию в таблицу FZ223_PPA.AGENCY
	 * 
	 * @param address_id = id соответствующего адреса из таблицы FZ223_PPA.AGENCY_ADDRESS
	 */
	public static void insertOrganization(String fullName, String ogrn, String inn, String kpp, String address_id
			,String phone, String website, String email) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + INSERT_AGENCY_SCRIPT;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(FULL_NAME, fullName);
		replaceMap.put(OGRN, ogrn);
		replaceMap.put(INN, inn);
		replaceMap.put(KPP, kpp);
		replaceMap.put(ADDRESS_ID, address_id);
		replaceMap.put(PHONE, phone);
		replaceMap.put(WEBSITE, website);
		replaceMap.put(EMAIL, email);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Выполняет скрипт из файла
	 * 
	 * @param pathToScript
	 *            путь к скрипту
	 * @param replaceMap
	 *            таблица символов, которые нужно заменить в каждой строке
	 *            замена ';' заменить на '' сществует по умолчанию.
	 */
	/*
	 * private void runScripts(String pathToScript,HashMap<String,String>
	 * replaceMap){ initializeDB(); File f = new File(pathToScript);
	 * if(!f.exists()){ f = new File("." + pathToScript); } if(!f.exists()){
	 * logger.fatal("Отустствует скрипт: " + pathToScript); } try{
	 * FileInputStream fstream = new FileInputStream(f.getAbsolutePath());
	 * DataInputStream in = new DataInputStream(fstream); BufferedReader br =
	 * new BufferedReader(new InputStreamReader(in)); String strLine; Connection
	 * connection = connectToDb(username, password); int lineCounter = 0;
	 * while((strLine = br.readLine()) != null){
	 * if(strLine.substring(0,1).equals("-")){ continue; } //делаем необходимые
	 * замены в скрипте for(String key : replaceMap.keySet()){ strLine =
	 * strLine.replace(key, replaceMap.get(key)); } try{ Statement st =
	 * connection.createStatement(); logger.info("Script: " + strLine); int
	 * status = st.executeUpdate(strLine.replace("; ", "").replace(";", ""));
	 * if(status == 1){ logger.info("Запрос из строки " + lineCounter +
	 * " выполнился успешно"); connection.commit(); } else {
	 * System.out.println("Запрос из строки " + lineCounter + " не удался"); }
	 * }catch(SQLException e){ System.out.println(e.getMessage()); }
	 * lineCounter++; } }catch(FileNotFoundException e){
	 * logger.debug(e.getMessage()); }catch(IOException e){
	 * logger.debug(e.getMessage()); } }
	 */
	/**
	 * Удаляет все протоколы закупки и переводит закупку на этап "Подачи заявок"
	 * 
	 * @param appVersion
	 *            версия приложения
	 * @param regNum
	 *            номер закупки
	 */
	public void cleanProtocolsAndReturn(String appVersion, String regNum) {
		String parentPath = PATH_TO_MAIN_SCRIPTS;
		String fullPath = parentPath + CLEAN_PROTOCOLS;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(REG_NUM, regNum);
		// Удаление всех протоколов
		runScripts(fullPath, replaceMap);
		fullPath = parentPath + UPDATE_ONE_PURSHASE_STAGE;
		// Перевод на этап "Подача заявок"
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Переводит закупку на этап "Работы комиссии"
	 * 
	 * @param regNum
	 *            номер извещения о закупке
	 */
	public void setRabotaKomissiiStage(String regNum) {
		String fullPath = PATH_TO_MAIN_SCRIPTS
				+ UPDATE_ONE_PURCHASE_STAGE_COMMISSION_ACTIVITIES;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(REG_NUM, regNum);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Удаляет все протоколы по номеру закупки
	 * 
	 * @param appVersion
	 *            версия приложения
	 * @param regNum
	 *            номер закупки
	 */
	public void cleanAllProtocols(String appVersion, String regNum) {
		String parentPath = PATH_TO_MAIN_SCRIPTS;
		String fullPath = parentPath + CLEAN_PROTOCOLS;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(REG_NUM, regNum);
		// Удаление всех протоколов
		runScripts(fullPath, replaceMap);
		fullPath = parentPath + UPDATE_ONE_PURSHASE_STAGE;
	}

	/**
	 * Удаляет вс уточненные требования для закупки
	 * 
	 * @param znumber
	 *            номер закупки
	 */
	public void cleanAllChangeRquirements(String znumber) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + CLEAN_CHANGE_REQUIREMENTS;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(REG_NUM, znumber);
		runScripts(fullPath, replaceMap);
	}

	/**
	 * Удаляет все сведения о договорах для закупки
	 * 
	 * @param znumber
	 *            номер закупки
	 */
	public void cleanAllContractsAndReturn(String znumber) {
		String fullPath = PATH_TO_MAIN_SCRIPTS + CLEAN_CONTRACTS;
		HashMap<String, String> replaceMap = new HashMap<String, String>();
		replaceMap.put(REG_NUM, znumber);
		runScripts(fullPath, replaceMap);
		fullPath = PATH_TO_MAIN_SCRIPTS
				+ UPDATE_ONE_PURCHASE_STAGE_COMMISSION_ACTIVITIES;
		// Перевод на этап "Работа комиссии"
		runScripts(fullPath, replaceMap);
	}
}
